PostgreSQL pg_profile 数据导入和导出
1 背景知识
本文介绍如何导出和导入 pg_profile 已收集的统计信息数据。
收集的快照统计数据可以进行导入导出。用于服务器实例迁移,还可以将收集的数据发送给支持团队,作为性能问题分析的定位的一手资料。
2 数据导出
通过函数 export_data()
、COPY 等任何方式导出数据。
默认情况下,export_data()
函数将导出所有的服务器的采集快照。也可以只导出一个服务器,并进一步限制快照范围。
su - postgres
psql -U postgres -d testdb
\copy (select * from profile.export_data('omega')) to 'export.csv'
COPY 46598
想要更多信息请参考 export 函数的章节。
3 数据导入
- 登录新的数据库。
su - postgres
psql -U postgres -d testdb
- 统计数据只能从本地表导入,所以先要加载导出的数据到本地表中。
CREATE TABLE import (section_id bigint, row_data json);
\copy import from 'export.csv'
CREATE TABLE
COPY 6437
SELECT * FROM profile.import_data('import','remote_');
所有服务器连接都会被禁止启用。
如果想要新追加数据,请不要设置此函数的服务器连接的前缀(server_name_prefix)参数。
如果想要重命名服务器连接 ,请设置前缀(server_name_prefix)参数,以区别不同的统计信息数据。
想要更多信息请参考 import 的章节。
4 数据验证
4.1 查看导入的快照
SELECT * FROM profile.show_samples('remote_omega') limit 10;
-[ RECORD 1 ]---+-----------------------
sample | 59
sample_time | 2024-06-28 15:30:02+08
sizes_collected | t
dbstats_reset |
bgwrstats_reset |
archstats_reset |
-[ RECORD 2 ]---+-----------------------
sample | 60
sample_time | 2024-06-28 16:00:02+08
sizes_collected | t
dbstats_reset |
bgwrstats_reset |
archstats_reset |
-[ RECORD 3 ]---+-----------------------
sample | 61
sample_time | 2024-06-28 16:30:02+08
sizes_collected | t
dbstats_reset |
bgwrstats_reset |
archstats_reset |
-[ RECORD 4 ]---+-----------------------
sample | 62
sample_time | 2024-06-28 17:00:01+08
sizes_collected | t
dbstats_reset |
bgwrstats_reset |
archstats_reset |
-[ RECORD 5 ]---+-----------------------
sample | 63
sample_time | 2024-06-28 17:30:01+08
sizes_collected | t
dbstats_reset |
bgwrstats_reset |
archstats_reset |
4.2 查看服务器链接
SELECT * FROM profile.show_servers();
-[ RECORD 1 ]--+------------
server_name | local
connstr | dbname=postgres port=5432
enabled | t
max_sample_age |
description |
-[ RECORD 2 ]--+------------
server_name | remote_omega
connstr | host=192.168.10.155 user=postgres dbname=testdb password=postgres port=5432
enabled | f
max_sample_age |
description |
5 环境清理
- 删除
import
表。
DROP TABLE import ;
- 删除
remote_omega
相关的服务器连接和所有快照。
SELECT profile.drop_server('remote_omega');